//给定一个非负整数 num，反复将各个位上的数字相加，直到结果为一位数。 
//
// 示例: 
//
// 输入: 38
//输出: 2 
//解释: 各位相加的过程为：3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数，所以返回 2。
// 
//
// 进阶: 
//你可以不使用循环或者递归，且在 O(1) 时间复杂度内解决这个问题吗？ 
// Related Topics 数学 
// 👍 265 👎 0

package leetcode.editor.cn;

import common.util.MyUtil;

/**
 * Java：各位相加
 *
 * @author changgui
 */
@SuppressWarnings("all")
public class P258_AddDigits {
    public static void main(String[] args) {
        Solution solution = new P258_AddDigits().new Solution();
        // TODO 此处开始你的表演
        MyUtil.print(solution.addDigits(38));
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    ///**
    // * 递归
    // */
    //class Solution {
    //    public int addDigits(int num) {
    //        if (num < 10) {
    //            return num;
    //        }
    //        int sum = 0;
    //        for (char c : String.valueOf(num).toCharArray()) {
    //            sum += c - '0';
    //        }
    //        return addDigits(sum);
    //    }
    //}

    /**
     * 牛逼的数学
     */
    class Solution {
        public int addDigits(int num) {
            return (num - 1) % 9 + 1;
        }
    }

    //leetcode submit region end(Prohibit modification and deletion)

}
